Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Relocation (computing)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Relocation_(computing)"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Relocation_computing rootpage-Relocation_computing skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Relocation (computing)</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">Not to be confused with <a href="Renumbering" class="mw-redirect" title="Renumbering">Renumbering</a>.</div>
<style data-mw-deduplicate="TemplateStyles:r1251242444">
/* start https://en.wikipedia.org/ */


.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style>
<p class="mw-empty-elt">


</p><p>In <a href="Software_development" title="Software development">software development</a>, <b>relocation</b> is the process of assigning load addresses for <a href="Position-dependent_code" class="mw-redirect" title="Position-dependent code">position-dependent code</a> and data of a program and adjusting the code and data to reflect the assigned addresses.<sup id="cite_ref-Intel_iRMX_1-0" class="reference"><a href="#cite_note-Intel_iRMX-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Levine_1999_CH1_CH3_2-0" class="reference"><a href="#cite_note-Levine_1999_CH1_CH3-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>A <a href="Linker_(computing)" title="Linker (computing)">linker</a> usually performs relocation in conjunction with <i>symbol resolution</i>, the process of searching files and libraries to replace symbolic references or names of <a href="Library_(computer_science)" class="mw-redirect" title="Library (computer science)">libraries</a> with actual usable addresses in <a href="Primary_storage" class="mw-redirect" title="Primary storage">memory</a> before running a program.
</p><p>Relocation is typically done by the linker at <a href="Link_time" title="Link time">link time</a>, but it can also be done at <a href="Load_time" class="mw-redirect" title="Load time">load time</a> by a relocating <a href="Loader_(computing)" title="Loader (computing)">loader</a>, or at <a href="Run_time_(program_lifecycle_phase)" class="mw-redirect" title="Run time (program lifecycle phase)">run time</a> by the running program <a href="Self-relocation" title="Self-relocation">itself</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Segmentation">Segmentation</h2></div>
<p><a href="Object_file" title="Object file">Object files</a> are typically segmented into various memory segment or section types. Example segment types include <a href="Code_segment" title="Code segment">code segment (.text)</a>, <a href="Data_segment" title="Data segment">initialized data segment (.data)</a>, <a href=".bss" title=".bss">uninitialized data segment (.bss)</a>, or others as established by the programmer, such as common segments, or named static segments.
</p>
<div class="mw-heading mw-heading2"><h2 id="Relocation_table">Relocation table</h2></div>
<p>The relocation table is a list of addresses created by a <a href="Compiler" title="Compiler">compiler</a> or <a href="Assembler_(computer_programming)" class="mw-redirect" title="Assembler (computer programming)">assembler</a> and stored in the object or executable file. Each entry in the table references an absolute address in the object code that must be changed when the loader relocates the program so that it will refer to the correct location. Entries in the relocation table are known as <i>fixups</i> and are designed to support relocation of the program as a complete unit. In some cases, each fixup in the table is itself relative to a base address of zero, so the fixups themselves must be changed as the loader moves through the table.<sup id="cite_ref-Levine_1999_CH1_CH3_2-1" class="reference"><a href="#cite_note-Levine_1999_CH1_CH3-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>In some architectures, a fixup that crosses certain boundaries (such as a segment boundary) or that is not aligned on a word boundary is illegal and flagged as an error by the linker.<sup id="cite_ref-Borland_2007_3-0" class="reference"><a href="#cite_note-Borland_2007-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="DOS_and_16-bit_Windows">DOS and 16-bit Windows</h3></div>
<p>Far <a href="Pointer_(computer_programming)" title="Pointer (computer programming)">pointers</a> (<a href="32-bit" class="mw-redirect" title="32-bit">32-bit</a> pointers with <a href="X86_memory_segmentation" title="X86 memory segmentation">segment</a>:offset, used to address 20-bit 640&nbsp;<a href="Kilobyte" title="Kilobyte">KB</a> memory space available to <a href="DOS" title="DOS">DOS</a> programs), which point to code or data within a <a href="DOS_executable" class="mw-redirect" title="DOS executable">DOS executable</a> (<a href="EXE" class="mw-redirect" title="EXE">EXE</a>), do not have absolute segments, because the actual address of code or data depends on where the program is loaded in memory and this is not known until the program is loaded.
</p><p>Instead, segments are relative values in the DOS EXE file. These segments need to be corrected, when the executable has been loaded into memory. The EXE <a href="Loader_(computing)" title="Loader (computing)">loader</a> uses a relocation table to find the segments that need to be adjusted.
</p>
<div class="mw-heading mw-heading3"><h3 id="Windows">Windows</h3></div>
<p>With 32-bit Windows operating systems, it is not mandatory to provide relocation tables for EXE files, since they are the first image loaded into the virtual address space and thus will be loaded at their preferred base address.
</p><p>For both <a href="Dynamic_Link_Library" class="mw-redirect" title="Dynamic Link Library">DLLs</a> and for EXEs which opt into <a href="Address_space_layout_randomization" title="Address space layout randomization">address space layout randomization</a> (ASLR), an <a href="Exploit_(computer_security)" title="Exploit (computer security)">exploit</a> mitigation technique introduced with <a href="Windows_Vista" title="Windows Vista">Windows Vista</a>, relocation tables once again become mandatory because of the possibility that the binary may be dynamically moved before being executed, even though they are still the first thing loaded in the virtual address space.
</p><p>Windows executables can be marked as ASLR-compatible. The ability exits in Windows 8 and newer to enable ASLR even for applications not marked as compatible.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> To run successfully in this envoronment the relocation sections cannot be omitted by the compiler.
</p>
<div class="mw-heading mw-heading3"><h3 id="Unix-like_systems">Unix-like systems</h3></div>
<p>The <a href="Executable_and_Linkable_Format" title="Executable and Linkable Format">Executable and Linkable Format</a> (ELF) executable format and shared library format used by most Unix-like systems allows several types of relocation to be defined.<sup id="cite_ref-ELF_5-0" class="reference"><a href="#cite_note-ELF-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Relocation_procedure">Relocation procedure</h2></div>
<p>The linker reads segment information and relocation tables in the object files and performs relocation by:
</p>
<ul><li>merging all segments of common type into a single segment of that type</li>
<li>assigning unique run time addresses to each section and each symbol, giving all code (functions) and data (global variables) unique run time addresses </li>
<li>referring to the <b>relocation table</b> to modify symbol references so that they point to the correct run time addresses.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Example">Example</h2></div>
<p>The following example uses <a href="Donald_Knuth" title="Donald Knuth">Donald Knuth</a>'s <a href="MIX_(abstract_machine)" title="MIX (abstract machine)">MIX</a> architecture and MIXAL assembly language. The principles are the same for any architecture, though the details will change.
</p>

<ul><li>(A) Program <i>SUBR</i> is compiled to produce object file (B), shown as both machine code and assembler. The compiler may start the compiled code at an arbitrary location, often location 1 as shown. Location 13 contains the machine code for the jump instruction to statement <i>ST</i> in location 5.</li>
<li>(C) If <i>SUBR</i> is later linked with other code it may be stored at a location other than 1. In this example the linker places it at location 120. The address in the jump instruction, which is now at location 133, must be <b>relocated</b> to point to the new location of the code for statement <i>ST</i>, now 125. [1 61 shown in the instruction is the MIX machine code representation of 125].</li>
<li>(D) When the program is loaded into memory to run it may be loaded at some location other than the one assigned by the linker. This example shows <i>SUBR</i> now at location 300. The address in the jump instruction, now at 313, needs to be relocated again so that it points to the updated location of <i>ST</i>, 305. [4 49 is the MIX machine representation of 305].</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Alternatives">Alternatives</h2></div>
<p>Some architectures avoid relocation entirely by deferring address assignment to run time; as, for example, in stack machines with <a href="Zero_address_arithmetic" class="mw-redirect" title="Zero address arithmetic">zero address arithmetic</a> or in some segmented architectures where every compilation unit is loaded into a separate segment.
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Linker_(computing)" title="Linker (computing)">Linker (computing)</a></li>
<li><a href="Library_(computing)" title="Library (computing)">Library (computing)</a></li>
<li><a href="Object_file" title="Object file">Object file</a></li>
<li><a href="Prebinding" class="mw-redirect" title="Prebinding">Prebinding</a></li>
<li><a href="Static_library" title="Static library">Static library</a></li>
<li><a href="Self-relocation" title="Self-relocation">Self-relocation</a></li>
<li><a href="Rebasing" title="Rebasing">Rebasing</a></li>
<li><a href="Garbage_collection_(computing)" class="mw-redirect" title="Garbage collection (computing)">Garbage collection</a></li>
<li><a href="Pointer_swizzling" title="Pointer swizzling">Pointer swizzling</a>, a lazy form of pointer modification</li>
<li><a href="Relocatable_Object_Module_Format" class="mw-redirect" title="Relocatable Object Module Format">Relocatable Object Module Format</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-Intel_iRMX-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-Intel_iRMX_1-0">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite class="citation book cs1">"Types of Object Code". <a rel="nofollow" class="external text" href="http://bitsavers.informatik.uni-stuttgart.de/pdf/intel/iRMX/iRMX_86_Rev_6_Mar_1984/146196_Burst/iRMX_86_Application_Loader_Reference_Manual.pdf"><i>iRMX 86 Application Loader Reference Manual</i></a> <span class="cs1-format">(PDF)</span>. <a href="Intel" title="Intel">Intel</a>. pp.&nbsp;1-2–1-3. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200111215002/http://bitsavers.informatik.uni-stuttgart.de/pdf/intel/iRMX/iRMX_86_Rev_6_Mar_1984/146196_Burst/iRMX_86_Application_Loader_Reference_Manual.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2020-01-11<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-01-11</span></span>. <q>[…] <i>Absolute code</i>, and an absolute object module, is code that has been processed by LOC86 to run only at a specific location in memory. The <a href="Loader_(computing)" title="Loader (computing)">Loader</a> loads an absolute object module only into the specific location the module must occupy. <i><a href="Position-independent_code" title="Position-independent code">Position-independent code</a></i> (commonly referred to as PIC) differs from absolute code in that PIC can be loaded into any memory location. The advantage of PIC over absolute code is that PIC does not require you to reserve a specific block of memory. When the Loader loads PIC, it obtains <a href="IRMX_86" class="mw-redirect" title="IRMX 86">iRMX&nbsp;86</a> memory segments from the pool of the calling task's job and loads the PIC into the segments. A restriction concerning PIC is that, as in the <a href="PL/M-86" class="mw-redirect" title="PL/M-86">PL/M-86</a> COMPACT model of segmentation […], it can have only one code segment and one data segment, rather than letting the base addresses of these segments, and therefore the segments themselves, vary dynamically. This means that PIC programs are necessarily less than 64K bytes in length. PIC code can be produced by means of the BIND control of LINK86. <i>Load-time locatable code</i> (commonly referred to as LTL code) is the third form of object code. LTL code is similar to PIC in that LTL code can be loaded anywhere in memory. However, when loading LTL code, the Loader changes the base portion of pointers so that the pointers are independent of the initial contents of the registers in the microprocessor. Because of this fixup (adjustment of base addresses), LTL code can be used by tasks having more than one code segment or more than one data segment. This means that LTL programs may be more than 64K bytes in length. <a href="FORTRAN_86" class="mw-redirect" title="FORTRAN 86">FORTRAN 86</a> and <a href="Pascal_86" class="mw-redirect" title="Pascal 86">Pascal 86</a> automatically produce LTL code, even for short programs. LTL code can be produced by means of the BIND control of LINK86. […]</q></cite></span>
</li>
<li id="cite_note-Levine_1999_CH1_CH3-2"><span class="mw-cite-backlink">^ <a href="#cite_ref-Levine_1999_CH1_CH3_2-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Levine_1999_CH1_CH3_2-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFLevine2000" class="citation book cs1"><a href="John_R._Levine" title="John R. Levine">Levine, John R.</a> (2000) [October 1999]. "Chapter 1: Linking and Loading &amp; Chapter 3: Object Files". <a rel="nofollow" class="external text" href="https://www.iecc.com/linker/"><i>Linkers and Loaders</i></a>. The Morgan Kaufmann Series in Software Engineering and Programming (1&nbsp;ed.). San Francisco, California, USA: <a href="Morgan_Kaufmann" class="mw-redirect" title="Morgan Kaufmann">Morgan Kaufmann</a>. p.&nbsp;5. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>1-55860-496-0</bdi>. <a href="OCLC_(identifier)" class="mw-redirect" title="OCLC (identifier)">OCLC</a>&nbsp;<a rel="nofollow" class="external text" href="https://search.worldcat.org/oclc/42413382">42413382</a>. <a rel="nofollow" class="external text" href="https://archive.today/20121205032107/http://www.iecc.com/linker/">Archived</a> from the original on 2012-12-05<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-01-12</span></span>.</cite> Code: <a rel="nofollow" class="external autonumber" href="https://archive.today/20200114225034/https://linker.iecc.com/code.html">[1]</a><a rel="nofollow" class="external autonumber" href="ftp://ftp.iecc.com/pub/linker/">[2]</a> Errata: <a rel="nofollow" class="external autonumber" href="https://linker.iecc.com/">[3]</a></span>
</li>
<li id="cite_note-Borland_2007-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-Borland_2007_3-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFBorland1999" class="citation web cs1"><a href="Borland" title="Borland">Borland</a> (1999-09-01) [1998-07-02]. <a rel="nofollow" class="external text" href="http://vmlinux.org/~jakov/community.borland.com/15961.html">"Borland article #15961: Coping with 'Fixup Overflow' messages"</a>. <i>community.borland.com</i>. Technical Information Database - Product: Borland C++ 3.1. TI961C.txt #15961. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20080707030831/http://vmlinux.org/~jakov/community.borland.com/15961.html">Archived</a> from the original on 2008-07-07<span class="reference-accessdate">. Retrieved <span class="nowrap">2007-01-15</span></span>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://cloud.google.com/blog/topics/threat-intelligence/six-facts-about-address-space-layout-randomization-on-windows">"Six Facts about Address Space Layout Randomization on Windows"</a>. 2020-03-17<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-07-24</span></span>.</cite></span>
</li>
<li id="cite_note-ELF-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-ELF_5-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.skyfree.org/linux/references/ELF_Format.pdf">"Executable and Linkable Format (ELF)"</a> <span class="cs1-format">(PDF)</span>. <i>skyfree.org</i>. Tool Interface Standards (TIS) Portable Formats Specification, Version 1.1. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20191224125108/http://www.skyfree.org/linux/references/ELF_Format.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2019-12-24<span class="reference-accessdate">. Retrieved <span class="nowrap">2018-10-01</span></span>.</cite></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="Further_reading">Further reading</h2></div>
<ul><li><cite id="CITEREFJohnson1975" class="citation book cs1">Johnson, Glenn (1975-12-21) [1975-11-13]. <a rel="nofollow" class="external text" href="https://archive.org/stream/bitsavers_decpdp11xxAINDEC11DFKTAAD1134MEMORYMANAGEMENTBASIC_2477046/MAINDEC-11-DFKTA-A-D_1134_MEMORY_MANAGEMENT_BASIC_LOGIC_Dec75"><i>11/34 Memory Management Basic Logic test</i></a>. <a href="Digital_Equipment_Corporation" title="Digital Equipment Corporation">Digital Equipment Corporation</a> (DEC). MAINDEC-11-DFKTA-A-D<span class="reference-accessdate">. Retrieved <span class="nowrap">2017-08-19</span></span>.</cite></li>
<li><cite id="CITEREFFormaniakLeitch1977" class="citation magazine cs1">Formaniak, Peter G.; Leitch, David (July 1977). <a rel="nofollow" class="external text" href="https://archive.org/details/byte-magazine-1977-07/page/n35/mode/1up">"A Proposed Microprocessor Software Standard"</a>. <i><a href="BYTE" class="mw-redirect" title="BYTE">BYTE</a> - the small systems journal</i>. Technical Forum. Vol.&nbsp;2, no.&nbsp;7. Peterborough, New Hampshire, USA: <a href="Byte_Publications%2C_Inc." class="mw-redirect" title="Byte Publications, Inc.">Byte Publications, Inc.</a> pp.&nbsp;34, <span class="nowrap">62–</span>63. ark:/13960/t32245485<span class="reference-accessdate">. Retrieved <span class="nowrap">2021-12-06</span></span>.</cite> (3 pages) (NB. Describes a <a href="Mostek_hex_format" class="mw-redirect" title="Mostek hex format">relocatable hex format</a> by <a href="Mostek" title="Mostek">Mostek</a>.)</li>
<li><cite id="CITEREFOgdinColvinPittmanTubb1977" class="citation magazine cs1">Ogdin, Carol Anne; Colvin, Neil; Pittman, Tom; Tubb, Philip (November 1977). <a rel="nofollow" class="external text" href="https://archive.org/details/byte-magazine-1977-11-rescan/page/n199/mode/1up">"Relocatable Object Code Formats"</a>. <i><a href="BYTE" class="mw-redirect" title="BYTE">BYTE</a> - the small systems journal</i>. Technical Forum. Vol.&nbsp;2, no.&nbsp;11. Peterborough, New Hampshire, USA: <a href="Byte_Publications%2C_Inc." class="mw-redirect" title="Byte Publications, Inc.">Byte Publications, Inc.</a> pp.&nbsp;<span class="nowrap">198–</span>205. ark:/13960/t59c88b4h, ark:/13960/t3kw76j24<span class="reference-accessdate">. Retrieved <span class="nowrap">2021-12-06</span></span>.</cite> (8 pages) (NB. Describes a <a href="Technical_Design_Labs_Relocable_Object_Module_Format" class="mw-redirect" title="Technical Design Labs Relocable Object Module Format">relocatable hex format</a> by <a href="Technical_Design_Labs" title="Technical Design Labs">TDL</a>.)</li>
<li><cite id="CITEREFKildall1978" class="citation journal cs1"><a href="Gary_Arlen_Kildall" class="mw-redirect" title="Gary Arlen Kildall">Kildall, Gary Arlen</a> (February 1978) [1976]. <a rel="nofollow" class="external text" href="https://archive.org/details/dr_dobbs_journal_vol_03/page/n67/mode/1up">"A simple technique for static relocation of absolute machine code"</a>. <i><a href="Dr._Dobb's_Journal_of_Computer_Calisthenics_%26_Orthodontia" class="mw-redirect" title="Dr. Dobb's Journal of Computer Calisthenics &amp; Orthodontia">Dr. Dobb's Journal of Computer Calisthenics &amp; Orthodontia</a></i>. <b>3</b> (2). <a href="People's_Computer_Company" title="People's Computer Company">People's Computer Company</a>: 10–13 (66–69). <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-8104-5490-4</bdi>. #22 ark:/13960/t8hf1g21p<span class="reference-accessdate">. Retrieved <span class="nowrap">2017-08-19</span></span>.</cite> <a rel="nofollow" class="external autonumber" href="https://web.archive.org/web/20170819141800/http://www.retrotechnology.com/dri/d_dri_refs.html">[4]</a><a rel="nofollow" class="external autonumber" href="https://web.archive.org/web/20170819173516/http://archive.computerhistory.org/resources/access/text/2016/12/102762506-05-01-acc.pdf">[5]</a><a rel="nofollow" class="external autonumber" href="https://archive.today/20170909091943/https://groups.google.com/forum/%23!msg/comp.os.cpm/TLHgIi16yTo/gupNB1ai8UQJ#!topic/comp.os.cpm/TLHgIi16yTo">[6]</a>. Originally presented at: <cite id="CITEREFKildall1977" class="citation conference cs1 cs1-prop-location-test"><a href="Gary_Arlen_Kildall" class="mw-redirect" title="Gary Arlen Kildall">Kildall, Gary Arlen</a> (1977) [22–24 November 1976]. "A Simple Technique for Static Relocation of Absolute Machine Code". Written at <a href="Naval_Postgraduate_School" title="Naval Postgraduate School">Naval Postgraduate School</a>, Monterey, California, USA. In Titus, Harold A. (ed.). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=cyBGAQAAIAAJ&amp;q=relocation"><i>Conference Record: Tenth Annual Asilomar Conference on Circuits, Systems and Computers: Papers Presented November 22–24, 1976</i></a>. <i>Asilomar Conference on Signals, Systems &amp; Computers</i>. Asilomar Hotel and Conference Grounds, Pacific Grove, California, USA: Western Periodicals Company. pp.&nbsp;<span class="nowrap">420–</span>424. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a>&nbsp;<a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/1058-6393">1058-6393</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-12-06</span></span>.</cite> (609 pages). (This "resize" method, named <i>page boundary relocation</i>, could be applied statically to a <a href="CP/M-80" class="mw-redirect" title="CP/M-80">CP/M-80</a> disk image using <a href="MOVCPM" class="mw-redirect" title="MOVCPM">MOVCPM</a> in order to maximize the <a href="Transient_Program_Area" class="mw-redirect" title="Transient Program Area">TPA</a> for programs to run. It was also utilized dynamically by the CP/M debugger <a href="Dynamic_Debugging_Tool" class="mw-redirect" title="Dynamic Debugging Tool">Dynamic Debugging Tool</a> (DDT) to <a href="Self-relocation" title="Self-relocation">relocate itself</a> into higher memory. The same approach was independently developed by <a href="Bruce_H._Van_Natta" class="mw-redirect" title="Bruce H. Van Natta">Bruce H. Van Natta</a> of <a href="IMS_Associates" class="mw-redirect" title="IMS Associates">IMS Associates</a> to produce relocatable <a href="PL/M" title="PL/M">PL/M</a> code. As <i>paragraph boundary relocation</i>, <a href="Self-relocation#Ref-Paul-2002-Drivers" title="Self-relocation">another variant</a> of this method was later utilized by dynamically <a href="High_memory_area" title="High memory area">HMA</a> self-relocating <a href="Terminate-and-stay-resident_program" title="Terminate-and-stay-resident program">TSRs</a> like <a href="KEYB_(DOS_command)" class="mw-redirect" title="KEYB (DOS command)">KEYB</a>, <a href="SHARE_(DOS_command)" class="mw-redirect" title="SHARE (DOS command)">SHARE</a>, and <a href="NLSFUNC_(DOS_command)" class="mw-redirect" title="NLSFUNC (DOS command)">NLSFUNC</a> under <a href="DR_DOS_6.0" class="mw-redirect" title="DR DOS 6.0">DR DOS&nbsp;6.0</a> and higher. A much more sophisticated and <a href="Byte_alignment" class="mw-redirect" title="Byte alignment">byte-level granular</a> method based on a somewhat similar approach was independently conceived and implemented by Matthias R. Paul and Axel C. Frinke for their <a href="Dynamic_dead-code_elimination" class="mw-redirect" title="Dynamic dead-code elimination">dynamic dead-code elimination</a> to dynamically minimize the runtime footprint of resident drivers and TSRs (like FreeKEYB).)</li>
<li><cite id="CITEREFMossip1980" class="citation magazine cs1 cs1-prop-location-test">Mossip, Richard H. (September–October 1980). Written at Bloomingdale, New Jersey, USA. <a rel="nofollow" class="external text" href="http://bitsavers.informatik.uni-stuttgart.de/magazines/S-100_Microsystems/v01n05.pdf">"Relocatable Code"</a> <span class="cs1-format">(PDF)</span>. <i><a href="S-100_Microsystems_(magazine)" class="mw-redirect" title="S-100 Microsystems (magazine)">S-100 Microsystems</a></i>. Vol.&nbsp;1, no.&nbsp;5. Mountainside &amp; Springfield, New Jersey, USA: <a href="Libes%2C_Inc." class="mw-redirect" title="Libes, Inc.">Libes, Inc.</a> pp.&nbsp;<span class="nowrap">54–</span>55. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a>&nbsp;<a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0199-7955">0199-7955</a>. ark:/13960/s2cfgkmxcwg. ark:/13960/s2qdm1t01nr. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20231127182118/http://bitsavers.informatik.uni-stuttgart.de/magazines/S-100_Microsystems/v01n05.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2023-11-27<span class="reference-accessdate">. Retrieved <span class="nowrap">2023-11-27</span></span>.</cite> <a rel="nofollow" class="external autonumber" href="https://archive.org/details/bitsavers_S100Micros_46725899/page/54/mode/1up">[7]</a><a rel="nofollow" class="external autonumber" href="https://archive.org/details/v1n5_20230524/page/54/mode/1up">[8]</a> (2 pages) (NB. Describes page boundary relocation and relocating assemblers.)</li>
<li><cite id="CITEREFHuittEubanksRolanderLaws2014" class="citation web cs1">Huitt, Robert; <a href="Gordon_Eubanks" title="Gordon Eubanks">Eubanks, Gordon</a>; <a href="Thomas_Alan_Rolander" class="mw-redirect" title="Thomas Alan Rolander">Rolander, Thomas "Tom" Alan</a>; Laws, David; Michel, Howard E.; Halla, Brian; <a href="John_Harrison_Wharton" title="John Harrison Wharton">Wharton, John Harrison</a>; Berg, Brian; Su, Weilian; <a href="Scott_Kildall" title="Scott Kildall">Kildall, Scott</a>; Kampe, Bill (2014-04-25). Laws, David (ed.). <a rel="nofollow" class="external text" href="https://archive.computerhistory.org/resources/access/text/2014/06/102746909-05-01-acc.pdf">"Legacy of Gary Kildall: The CP/M IEEE Milestone Dedication"</a> <span class="cs1-format">(PDF)</span> (video transscription). Pacific Grove, California, USA: <a href="Computer_History_Museum" title="Computer History Museum">Computer History Museum</a>. CHM Reference number: X7170.2014. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20141227142045/http://archive.computerhistory.org/resources/access/text/2014/06/102746909-05-01-acc.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2014-12-27<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-01-19</span></span>. <q>[…] Laws: […] "dynamic relocation" of the OS. Can you tell us what that is and why it was important? […] <a href="Gordon_Eubanks" title="Gordon Eubanks">Eubanks</a>: […] what <a href="Gary_Arlen_Kildall" class="mw-redirect" title="Gary Arlen Kildall">Gary</a> did […] was […] mind boggling. […] I remember the day at the <a href="Naval_Postgraduate_School" title="Naval Postgraduate School">school</a> he came bouncing into the lab and he said, I have figured out how to relocate. He took advantage of the fact that the only byte was always going to be the <a href="High_order_byte" class="mw-redirect" title="High order byte">high order byte</a>. And so he created a <a href="Bitmap" title="Bitmap">bitmap</a>. […] it didn't matter how much memory the computer had, the operating system could always be moved into the high memory. Therefore, you could commercialize this […] on machines of different amounts of memory. […] you couldn't be selling a 64K <a href="CP/M" title="CP/M">CP/M</a> and a 47K CP/M. It'd just be ridiculous to have a hard compile in the addresses. So Gary figured this out one night, probably in the middle of the night thinking about some coding thing, and this really made CP/M possible to commercialize. I really think that without that relocation it would have been a very tough problem. To get people to buy it, it'd seem complicated to them, and if you added more memory you'd have to go get a different operating system. […] <a href="Intel" title="Intel">Intel</a> […] had the <a href="Little-endian" class="mw-redirect" title="Little-endian">bytes reversed</a>, right, for the memory addresses. But they were always in the same place, so you could relocate it on a <a href="256_byte_boundary" class="mw-redirect" title="256 byte boundary">256 byte boundary</a>, to be precise. You could therefore always relocate it with just a bitmap of where those […] Laws: Certainly the most eloquent explanation I've ever had of dynamic relocation […]</q></cite> <a rel="nofollow" class="external autonumber" href="https://ethw.org/Milestones:The_CP/M_Microcomputer_Operating_System,_1974">[9]</a><a rel="nofollow" class="external autonumber" href="https://www.youtube.com/watch?v=HO6IPpL0y8g">[10]</a> (33 pages)</li>
<li><cite id="CITEREFLiebervon_Massenbach1987" class="citation journal cs1 cs1-prop-foreign-lang-source">Lieber, Eckhard; von Massenbach, Thomas (1987). "CP/M 2 lernt dazu. Modulare Systemerweiterungen auch für das 'alte' CP/M". <i><a href="C't_-_magazin_f%C3%BCr_computertechnik" class="mw-redirect" title="C't - magazin für computertechnik">c't - magazin für computertechnik</a></i> (part 1) (in German). <b>1987</b> (1). <a href="Heise_Verlag" class="mw-redirect" title="Heise Verlag">Heise Verlag</a>: <span class="nowrap">124–</span>135;</cite> <cite id="CITEREFLiebervon_Massenbach1987" class="citation journal cs1 cs1-prop-foreign-lang-source">Lieber, Eckhard; von Massenbach, Thomas (1987). "CP/M 2 lernt dazu. Modulare Systemerweiterungen auch für das 'alte' CP/M". <i><a href="C't_-_magazin_f%C3%BCr_computertechnik" class="mw-redirect" title="C't - magazin für computertechnik">c't - magazin für computertechnik</a></i> (part 2) (in German). <b>1987</b> (2). <a href="Heise_Verlag" class="mw-redirect" title="Heise Verlag">Heise Verlag</a>: <span class="nowrap">78–</span>85;</cite> <cite id="CITEREFHuck2016" class="citation web cs1 cs1-prop-foreign-lang-source">Huck, Alex (2016-10-09). <a rel="nofollow" class="external text" href="http://hc-ddr.hucki.net/wiki/doku.php/cpm:rsm:ct">"RSM für CP/M 2.2"</a>. <i>Homecomputer DDR</i> (in German). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20161125023237/http://hc-ddr.hucki.net/wiki/doku.php/cpm%3Arsm%3Act">Archived</a> from the original on 2016-11-25<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-11-25</span></span>.</cite></li>
<li><cite id="CITEREFGuzis2015" class="citation web cs1">Guzis, Charles "Chuck" P. (2015-03-16). <a rel="nofollow" class="external text" href="http://www.vcfed.org/forum/showthread.php?46767-CP-M-assembly-language-programming&amp;p=360328#post360328">"Re: CP/M assembly language programming"</a>. <i>Vintage Computer Forum</i>. Genre: CP/M and MP/M. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200201052736/http://www.vcfed.org/forum/showthread.php?46767-CP-M-assembly-language-programming&amp;p=360328">Archived</a> from the original on 2020-02-01<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-02-01</span></span>. <q>[…] Ever wonder how <a href="MOVCPM" class="mw-redirect" title="MOVCPM">MOVCPM</a> works? Since the <a href="BDOS" class="mw-redirect" title="BDOS">BDOS</a> and <a href="Console_Command_Processor" class="mw-redirect" title="Console Command Processor">CCP</a> is in high memory, above the user application, addresses have to be changed every time the system memory size is changed. Now that requires relocating addresses in <a href="8080" class="mw-redirect" title="8080">8080</a> code, since <a href="Relative_addressing" class="mw-redirect" title="Relative addressing">relative addressing</a> is not part of the hardware. Without implementing a full-blown relocating assembler and loader, how does one go about this? It's actually pretty clever and <a href="MP/M" title="MP/M">MP/M</a> even uses this scheme to construct its page-relocatable files. You simply assemble the source program <i>twice</i> with the second assembly origin 100H (256 bytes) higher than the first. The two binary images are then compared, byte for byte, and a <a href="Bitmap" title="Bitmap">map</a> constructed of where pairs of bytes differ in value by exactly 100H. The result is a list of locations where the relocation value needs to be adjusted if the location of a program in memory is to be moved. MP/M calls this sort of file PRL (page relocatable), but I don't know that CP/M 2.2 ever coined a name for it. […]</q></cite></li>
<li><cite id="CITEREFGuzis2015" class="citation web cs1">Guzis, Charles "Chuck" P. (2015-07-29). <a rel="nofollow" class="external text" href="http://www.vcfed.org/forum/showthread.php?48532-How-does-MOVCPM-COM-work&amp;p=376438#post376438">"Re: How does MOVCPM.COM work?"</a>. <i>Vintage Computer Forum</i>. Genre: CP/M and MP/M. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200201053054/http://www.vcfed.org/forum/showthread.php?48532-How-does-MOVCPM-COM-work=&amp;p=376438">Archived</a> from the original on 2020-02-01<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-02-01</span></span>. <q>[…] <a href="MOVCPM" class="mw-redirect" title="MOVCPM">MOVCPM</a> uses an early type of PRL format. Basically, <a href="CP/M" title="CP/M">CP/M</a> is assembled twice; the second time is 100H bytes offset. The two binaries are compared and a <a href="Bitmap" title="Bitmap">bitmap</a> constructed. A set bit implies that the <a href="High-order_byte" class="mw-redirect" title="High-order byte">high-order byte</a> of an address is to be adjusted. Low order address bytes are not affected; hence, "Page relocatable file". Each byte in the bitmap corresponds to 8 bytes in the binary data. […] So everything to be moved in MOVCPM is part of the image and its relocation bitmap. […]</q></cite></li>
<li><cite id="CITEREFGuzis2016" class="citation web cs1">Guzis, Charles "Chuck" P. (2016-11-08). <a rel="nofollow" class="external text" href="http://www.vcfed.org/forum/showthread.php?54822-Is-it-safe-to-use-RST-28h-in-CP-M-assembly-programs&amp;p=434954#post434954">"Re: Is it safe to use RST 28h in CP/M assembly programs?"</a>. <i>Vintage Computer Forum</i>. Genre: CP/M and MP/M. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200201053327/http://www.vcfed.org/forum/showthread.php?54822-Is-it-safe-to-use-RST-28h-in-CP-M-assembly-programs&amp;p=434954">Archived</a> from the original on 2020-02-01<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-02-01</span></span>. <q>[…] I've referenced PRL files and how they originally got their start with <a href="MOVCPM" class="mw-redirect" title="MOVCPM">MOVCPM</a>, but became an integral part of <a href="MP/M" title="MP/M">MP/M</a> and <a href="CP/M_3.0" class="mw-redirect" title="CP/M 3.0">CP/M 3.0</a>. But PRL files use a <a href="Bitmap" title="Bitmap">bit map</a> in which every bit corresponds to a memory location; one bits indicate that a page relocation offset should be added to the corresponding memory location. If you have very few absolute memory references (as opposed to relative ones) you may want to employ a pointer list (2 bytes per reference) rather than a bitmap. This is unlikely in <a href="8080" class="mw-redirect" title="8080">8080</a> code which doesn't have relative jumps, but may be a consideration for <a href="Z80" class="mw-redirect" title="Z80">Z80</a> code. The trick to quickly find this out is to assemble your program twice; the second time offset by 100H, then compare the two binaries. The advantage of <a href="Runtime_(program_lifecycle_phase)" class="mw-redirect" title="Runtime (program lifecycle phase)">run-time</a> relocation is that you don't have to incur a penalty for code that attempts to get around the relocation issue--no "tricks"; just write straight code. […]</q></cite></li>
<li><cite id="CITEREFRoth1978" class="citation journal cs1">Roth, Richard L. (February 1978) [1977]. <a rel="nofollow" class="external text" href="https://archive.org/stream/dr_dobbs_journal_vol_03/dr_dobbs_journal_vol_03_djvu.txt">"Relocation Is Not Just Moving Programs"</a>. <i><a href="Dr._Dobb's_Journal_of_Computer_Calisthenics_%26_Orthodontia" class="mw-redirect" title="Dr. Dobb's Journal of Computer Calisthenics &amp; Orthodontia">Dr. Dobb's Journal of Computer Calisthenics &amp; Orthodontia</a></i>. <b>3</b> (2). Ridgefield, California, USA: <a href="People's_Computer_Company" title="People's Computer Company">People's Computer Company</a>: 14–20 (70–76). <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-8104-5490-4</bdi>. #22. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20190420010941/https://archive.org/stream/dr_dobbs_journal_vol_03/dr_dobbs_journal_vol_03_djvu.txt">Archived</a> from the original on 2019-04-20<span class="reference-accessdate">. Retrieved <span class="nowrap">2019-04-19</span></span>.</cite></li>
<li><cite id="CITEREFCalingaert1979" class="citation book cs1 cs1-prop-location-test">Calingaert, Peter (1979) [1978-11-05]. "8.2.2 Relocating Loader". Written at <a href="University_of_North_Carolina_at_Chapel_Hill" title="University of North Carolina at Chapel Hill">University of North Carolina at Chapel Hill</a>. In <a href="Ellis_Horowitz" title="Ellis Horowitz">Horowitz, Ellis</a> (ed.). <span class="id-lock-registration" title="Free registration required"><a rel="nofollow" class="external text" href="https://archive.org/details/assemblerscompil00cali"><i>Assemblers, Compilers, and Program Translation</i></a></span>. Computer software engineering series (1st printing, 1st&nbsp;ed.). Potomac, Maryland, USA: <a href="Computer_Science_Press%2C_Inc." class="mw-redirect" title="Computer Science Press, Inc.">Computer Science Press, Inc.</a> pp.&nbsp;<a rel="nofollow" class="external text" href="https://archive.org/details/assemblerscompil00cali/page/237">237</a>–241. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-914894-23-4</bdi>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a>&nbsp;<a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0888-2088">0888-2088</a>. <a href="LCCN_(identifier)" class="mw-redirect" title="LCCN (identifier)">LCCN</a>&nbsp;<a rel="nofollow" class="external text" href="https://lccn.loc.gov/78-21905">78-21905</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-03-20</span></span>.</cite> (2+xiv+270+6 pages)</li>
<li><cite class="citation book cs1"><a rel="nofollow" class="external text" href="https://www.fileformat.info/format/ms-obj/corion.htm"><i>The Microsoft OBJ File Format</i></a>. <a href="Microsoft" title="Microsoft">Microsoft</a>, Product Support Services. Application Note SS0288. <a rel="nofollow" class="external text" href="https://archive.today/20170909092856/http://www.fileformat.info/format/ms-obj/corion.htm">Archived</a> from the original on 2017-09-09<span class="reference-accessdate">. Retrieved <span class="nowrap">2017-08-21</span></span>.</cite></li>
<li><cite id="CITEREFTanenbaumBos2015" class="citation book cs1"><a href="Andrew_Stuart_Tanenbaum" class="mw-redirect" title="Andrew Stuart Tanenbaum">Tanenbaum, Andrew Stuart</a>; Bos, Herbert (2015). <i>Modern Operating Systems</i> (4&nbsp;ed.). <a href="Pearson_Education_Inc." class="mw-redirect" title="Pearson Education Inc.">Pearson Education Inc.</a> <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0-13359162-0</bdi>.</cite></li>
<li><cite id="CITEREFElliott2012" class="citation web cs1">Elliott, John C. (2012-06-05) [2000-01-02]. <a rel="nofollow" class="external text" href="https://www.seasip.info/Cpm/prl.html">"PRL file format"</a>. <i>seasip.info</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200126182027/https://www.seasip.info/Cpm/prl.html">Archived</a> from the original on 2020-01-26<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-01-26</span></span>. <q>[…] A PRL file is a relocatable binary file, used by <a href="MP/M" title="MP/M">MP/M</a> and <a href="CP/M_Plus" class="mw-redirect" title="CP/M Plus">CP/M Plus</a> for various modules other than <a href=".COM_file" class="mw-redirect" title=".COM file">.COM files</a>. The file format is also used for FID files on the <a href="Amstrad_PCW" title="Amstrad PCW">Amstrad PCW</a>. There are several file formats which use versions of PRL: SPR (System PRL), RSP (Resident System Process). LINK-80 can also produce <a href=".OVL" class="mw-redirect" title=".OVL">OVL</a> (<a href="Overlay_(programming)" title="Overlay (programming)">overlay</a>) files, which have a PRL header but are not relocatable. <a href="Graphics_System_Extension" class="mw-redirect" title="Graphics System Extension">GSX</a> drivers are in PRL format; so are <a href="Resident_System_Extension" class="mw-redirect" title="Resident System Extension">Resident System Extensions</a> (.RSX). […]</q></cite> <a rel="nofollow" class="external autonumber" href="https://www.seasip.info/Cpm/amsfid.html#PRL%20file%20format">[11]</a></li>
<li><cite id="CITEREFElliott2012" class="citation web cs1">Elliott, John C. (2012-06-05) [2000-01-02]. <a rel="nofollow" class="external text" href="https://www.seasip.info/Cpm/rel.html">"Microsoft REL format"</a>. <i>seasip.info</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200126181737/https://www.seasip.info/Cpm/rel.html">Archived</a> from the original on 2020-01-26<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-01-26</span></span>. <q>[…] The REL format is generated by <a href="Microsoft" title="Microsoft">Microsoft</a>'s M80 and <a href="Digital_Research" title="Digital Research">Digital Research</a>'s RMAC. […]</q></cite></li>
<li><cite id="CITEREFfeilipu2018" class="citation web cs1">feilipu (2018-09-05) [2018-09-02]. <a rel="nofollow" class="external text" href="https://github.com/z88dk/z88dk/issues/935">"Support for PRL, page relocatable executable for MP/M"</a>. <i>z88dk</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200201053652/https://github.com/z88dk/z88dk/issues/935">Archived</a> from the original on 2020-02-01<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-01-26</span></span>. <q>[…] Out of the assembled <a href="Microsoft" title="Microsoft">Microsoft</a> .REL files the linker has to generate a .PRL format executable for <a href="MP/M" title="MP/M">MP/M</a>. The .PRL format is essentially a <a href=".COM_file" class="mw-redirect" title=".COM file">.COM file</a> with some additional information to enable the program and its data to be relocated onto any page. What does a .PRL file look like? The first bytes are size of the program, followed by the program origin at 0x0100. Following the program, there is a bit-for-byte mask appended to allow the MP/M system to know which bytes in the program need to be changed when the program is relocated. How does the linker do that without disassembling the whole application? In advance the program is linked for two different origins 0x0100 and 0x0200, from the .REL objects. The linker trick is simply recognising which bytes in the two versions of the executable differ. These bytes are then recorded in the bit mask stored following the executable, and the final .PRL program is designed to run from 0x0100 plus its page offset. The same trick is done for the .RSP and .SPR executable files, except that both these formats forego the offset, and run from 0x0000 plus their page offset. […]</q></cite></li>
<li><cite id="CITEREFBrothers1983" class="citation journal cs1">Brothers, Hardin (April 1983). <a rel="nofollow" class="external text" href="https://archive.org/details/80-microcomputing-magazine-1983-04">"Understanding Relocatable Code"</a>. <i><a href="80_Micro" title="80 Micro">80 Micro</a></i>. The Next Step (39). <a href="1001001%2C_Inc." class="mw-redirect" title="1001001, Inc.">1001001, Inc.</a>: <a rel="nofollow" class="external text" href="https://archive.org/details/80-microcomputing-magazine-1983-04/page/n37">38</a>, 40, 42, 45. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a>&nbsp;<a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0744-7868">0744-7868</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-02-06</span></span>.</cite> <a rel="nofollow" class="external autonumber" href="https://archive.org/stream/80-microcomputing-magazine-1983-04/80Microcomputing_0483_djvu.txt">[12]</a><a rel="nofollow" class="external autonumber" href="https://archive.org/download/80-microcomputing-magazine-1983-04/80Microcomputing_0483_text.pdf">[13]</a></li>
<li><cite id="CITEREFBrothers1985" class="citation journal cs1">Brothers, Hardin (April 1985). <a rel="nofollow" class="external text" href="https://archive.org/details/80-microcomputing-magazine-1985-04">"Relocatable Programs: Microcomputing's Hoboes"</a>. <i><a href="80_Micro" title="80 Micro">80 Micro</a></i>. The Next Step (63). <a href="CW_Communications/Peterborough%2C_Inc." class="mw-redirect" title="CW Communications/Peterborough, Inc.">CW Communications/Peterborough, Inc.</a>: <a rel="nofollow" class="external text" href="https://archive.org/details/80-microcomputing-magazine-1985-04/page/n99">98</a>, 100, <span class="nowrap">102–</span>103. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a>&nbsp;<a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0744-7868">0744-7868</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-02-06</span></span>.</cite> <a rel="nofollow" class="external autonumber" href="https://archive.org/stream/80-microcomputing-magazine-1985-04/80Microcomputing_0485_djvu.txt">[14]</a><a rel="nofollow" class="external autonumber" href="https://archive.org/download/80-microcomputing-magazine-1985-04/80Microcomputing_0485_text.pdf">[15]</a></li>
<li><cite id="CITEREFSage1988" class="citation journal cs1">Sage, Jay (May–June 1988). Carlson, Art (ed.). <a rel="nofollow" class="external text" href="https://archive.org/details/the-computer-journal-32">"ZCPR 3.4 - Type-4 Programs"</a>. <i>The Computer Journal (TCJ) - Programming, User Support, Applications</i>. ZCPR3 Corner (32). Columbia Falls, Montana, USA: <a rel="nofollow" class="external text" href="https://archive.org/details/the-computer-journal-32/page/n10/mode/1up">10</a>–17 [<a rel="nofollow" class="external text" href="https://archive.org/details/the-computer-journal-32/page/n15/mode/1up">15</a>–16]. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a>&nbsp;<a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0748-9331">0748-9331</a>. ark:/13960/t1wd4v943<span class="reference-accessdate">. Retrieved <span class="nowrap">2021-11-29</span></span>.</cite> <a rel="nofollow" class="external autonumber" href="https://archive.org/stream/the-computer-journal-32/tcj_32_May-June_1988_djvu.txt">[16]</a><a rel="nofollow" class="external autonumber" href="https://archive.org/download/the-computer-journal-32/tcj_32_May-June_1988_text.pdf">[17]</a></li>
<li><cite id="CITEREFMitchell1988" class="citation journal cs1">Mitchell, Bridger (July–August 1988). Carlson, Art (ed.). <a rel="nofollow" class="external text" href="https://archive.org/details/the-computer-journal-33">"Z3PLUS &amp; Relocation - Information on ZCPR3PLUS, and how to write self relocating Z80 code"</a>. <i>The Computer Journal (TCJ) - Programming, User Support, Applications</i>. Advanced CP/M (33). Columbia Falls, Montana, USA: <a rel="nofollow" class="external text" href="https://archive.org/details/the-computer-journal-33/page/n10/mode/1up">9</a>–15. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a>&nbsp;<a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0748-9331">0748-9331</a>. ark:/13960/t36121780<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-02-09</span></span>.</cite> <a rel="nofollow" class="external autonumber" href="https://archive.org/stream/the-computer-journal-33/tcj_33_July-August_1988_djvu.txt">[18]</a><a rel="nofollow" class="external autonumber" href="https://archive.org/download/the-computer-journal-33/tcj_33_July-August_1988_text.pdf">[19]</a></li>
<li><cite id="CITEREFSage1988" class="citation journal cs1">Sage, Jay (September–October 1988). Carlson, Art (ed.). <a rel="nofollow" class="external text" href="https://archive.org/details/the-computer-journal-34">"More on relocatable code, PRL files, ZCPR34, and Type-4 programs"</a>. <i>The Computer Journal (TCJ) - Programming, User Support, Applications</i>. ZCPR3 Corner (34). Columbia Falls, Montana, USA: <a rel="nofollow" class="external text" href="https://archive.org/details/the-computer-journal-34/page/n20/mode/1up">20</a>–25. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a>&nbsp;<a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0748-9331">0748-9331</a>. ark:/13960/t0ks7pc39<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-02-09</span></span>.</cite> <a rel="nofollow" class="external autonumber" href="https://archive.org/stream/the-computer-journal-34/tcj_34_September-October_1988_djvu.txt">[20]</a><a rel="nofollow" class="external autonumber" href="https://archive.org/download/the-computer-journal-34/tcj_34_September-October_1988_text.pdf">[21]</a><a rel="nofollow" class="external autonumber" href="https://web.archive.org/web/20170831184307/http://gaby.de/ftp/pub/cpm/znode51/articles/tcj/tcj34.ws">[22]</a></li>
<li><cite id="CITEREFSage1992" class="citation journal cs1">Sage, Jay (January–February 1992). Carlson, Art; McEwen, Chris (eds.). <a rel="nofollow" class="external text" href="https://archive.org/details/the-computer-journal-54">"Ten Years of ZCPR"</a>. <i>The Computer Journal (TCJ) - Programming, User Support, Applications</i>. Z-System Corner (54). S. Plainfield, New Jersey, USA: Socrates Press: <a rel="nofollow" class="external text" href="https://archive.org/details/the-computer-journal-54/page/n4/mode/1up">3</a>–7. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a>&nbsp;<a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0748-9331">0748-9331</a>. ark:/13960/t89g6n689<span class="reference-accessdate">. Retrieved <span class="nowrap">2021-11-29</span></span>.</cite> <a rel="nofollow" class="external autonumber" href="https://archive.org/stream/the-computer-journal-54/tcj_54_January-February_1992_djvu.txt">[23]</a><a rel="nofollow" class="external autonumber" href="https://archive.org/download/the-computer-journal-54/tcj_54_January-February_1992_text.pdf">[24]</a><a rel="nofollow" class="external autonumber" href="https://web.archive.org/web/20170831184437/http://gaby.de/ftp/pub/cpm/znode51/articles/tcj/tcj54.ws">[25]</a></li>
<li><cite id="CITEREFSage1992" class="citation journal cs1">Sage, Jay (May–June 1992) [March–June 1992]. Carlson, Art; McEwen, Chris (eds.). <a rel="nofollow" class="external text" href="https://archive.org/details/the-computer-journal-55">"Type-3 and Type-4 Programs"</a>. <i>The Computer Journal (TCJ) - Programming, User Support, Applications</i>. Z-System Corner - Some New Applications of Type-4 Programs (55). S. Plainfield, New Jersey, USA: Socrates Press: <a rel="nofollow" class="external text" href="https://archive.org/details/the-computer-journal-55/page/n14/mode/1up">13</a>–19. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a>&nbsp;<a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0748-9331">0748-9331</a>. ark:/13960/t4dn54d22<span class="reference-accessdate">. Retrieved <span class="nowrap">2021-11-29</span></span>.</cite> <a rel="nofollow" class="external autonumber" href="https://archive.org/stream/the-computer-journal-55/tcj_55_March-June_1992_djvu.txt">[26]</a><a rel="nofollow" class="external autonumber" href="https://archive.org/download/the-computer-journal-55/tcj_55_March-June_1992_text.pdf">[27]</a></li>
<li><cite id="CITEREFGanssle1992" class="citation journal cs1">Ganssle, Jack (February 1992). <a rel="nofollow" class="external text" href="http://www.ganssle.com/articles/arelocat.htm">"Writing Relocatable Code - Some embedded code must run at more than one address"</a>. <i>Embedded Systems Programming</i>. The Ganssle Group - Perfecting the Art of Building Embedded Systems / TGG. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20190718232931/http://www.ganssle.com/articles/arelocat.htm">Archived</a> from the original on 2019-07-18<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-02-20</span></span>.</cite></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Application_binary_interface_(ABI)74" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div id="Application_binary_interface_(ABI)74" style="font-size:114%;margin:0 4em"><a href="Application_binary_interface" title="Application binary interface">Application binary interface</a> (ABI)</div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Parts,<br>conventions</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Data_structure_alignment" title="Data structure alignment">Alignment</a></li>
<li><a href="Calling_convention" title="Calling convention">Calling convention</a></li>
<li><a href="Call_stack" title="Call stack">Call stack</a></li>
<li><a href="Library_(computing)" title="Library (computing)">Library</a>
<ul><li><a href="Static_library" title="Static library">static</a></li></ul></li>
<li><a href="Machine_code" title="Machine code">Machine code</a></li>
<li><a href="Memory_segmentation" title="Memory segmentation">Memory segmentation</a></li>
<li><a href="Name_mangling" title="Name mangling">Name mangling</a></li>
<li><a href="Object_code" title="Object code">Object code</a></li>
<li><a href="Opaque_pointer" title="Opaque pointer">Opaque pointer</a></li>
<li><a href="Position-independent_code" title="Position-independent code">Position-independent code</a></li>

<li><a href="System_call" title="System call">System call</a></li>
<li><a href="Virtual_method_table" title="Virtual method table">Virtual method table</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Related topics</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Binary-code_compatibility" title="Binary-code compatibility">Binary-code compatibility</a></li>
<li><a href="Foreign_function_interface" title="Foreign function interface">Foreign function interface</a></li>
<li><a href="Language_binding" title="Language binding">Language binding</a></li>
<li><a href="Linker_(computing)" title="Linker (computing)">Linker</a>
<ul><li><a href="Dynamic_linker" title="Dynamic linker">dynamic</a></li></ul></li>
<li><a href="Loader_(computing)" title="Loader (computing)">Loader</a></li>
<li><a href="Year_2038_problem" title="Year 2038 problem">Year 2038 problem</a></li></ul>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox" aria-labelledby="Executable_and_object_file_formats118" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Executable_and_object_file_formats118" style="font-size:114%;margin:0 4em"><a href="Executable" title="Executable">Executable</a> and <a href="Object_file" title="Object file">object file</a> formats</div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="A.out" title="A.out">a.out</a></li>
<li><a href="Arm_Image_Format" title="Arm Image Format">AIF</a></li>
<li><a href="COFF" title="COFF">COFF</a></li>
<li><a href="CMD_file_(CP/M)" title="CMD file (CP/M)">CMD</a></li>
<li><a href="COM_file" title="COM file">COM</a></li>
<li><a href="ECOFF" title="ECOFF">ECOFF</a></li>
<li><a href="Executable_and_Linkable_Format" title="Executable and Linkable Format">ELF</a></li>
<li><a href="GOFF" title="GOFF">GOFF</a></li>
<li><a href="Amiga_Hunk" title="Amiga Hunk">Hunk</a></li>
<li><a href="Mach-O" title="Mach-O">Mach-O</a></li>
<li><a href="DOS_MZ_executable" title="DOS MZ executable">MZ</a></li>
<li><a href="New_Executable" title="New Executable">NE</a></li>
<li><a href="Object_Module_Format_(Intel)" title="Object Module Format (Intel)">OMF</a></li>
<li><a href="OS/360_Object_File_Format" title="OS/360 Object File Format">OS/360</a></li>
<li><a href="Portable_Executable" title="Portable Executable">PE</a></li>
<li><a href="Preferred_Executable_Format" title="Preferred Executable Format">PEF</a></li>
<li><a href=".X_(Human68K)" class="mw-redirect" title=".X (Human68K)">X</a></li>
<li><a href="XCOFF" title="XCOFF">XCOFF</a></li></ul>
</div></td></tr><tr><td class="navbox-abovebelow hlist" colspan="2"><div>
<ul><li><a href="Comparison_of_executable_file_formats" title="Comparison of executable file formats">Comparison of formats</a></li>
<li><a href=".exe" title=".exe">.exe</a></li></ul>
</div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-07-24" href="https://en.wikipedia.org/wiki/?title=Relocation_(computing)&amp;oldid=1302318084">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>